/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamanpospendapatanunit;

import java.util.HashMap;
import java.util.Map;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.perekamankodeglunitkerja.PerekamanKodeGLUnitKerja;
import org.sadhar.sipp.perekamankodeglunitkerja.PerekamanKodeGLUnitKerjaDAO;
import org.sadhar.sipp.perekamankodeglunitkerja.PerekamanKodeGLUnitKerjaDAOImpl;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Space;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Window;

/**
 *
 * @author kris
 */
public class PerekamanPosPendapatanUnitWnd extends ClassApplicationModule {

    private PerekamanPosPendapatanUnitDAO posPendapatanUnitDAO;
    private PerekamanKodeGLUnitKerjaDAO unitKerjaDAO;
    private Tree treeUnitKerja;
    private Label lblNamaUnitKerja;
    private Textbox txtboxKodeUnit;
    private Textbox txtboxSearch;
    private Textbox txtboxIdPosPendapatan;
    private Textbox txtboxIdPosAnggaranPendapatanUnit;
    private Listbox lstboxPosPendapatan;
    private Label lblPosPendapatan;
    private Label lblTahunAnggaran;
    private Boolean simpan = true;
    private ClassSession session;

    public PerekamanPosPendapatanUnitWnd() {
        posPendapatanUnitDAO = new PerekamanPosPendapatanUnitImpl();
        unitKerjaDAO = new PerekamanKodeGLUnitKerjaDAOImpl();
    }

    public void onCreate() throws Exception {
        treeUnitKerja = (Tree) getFellow("treeUnitKerja");
        lblNamaUnitKerja = (Label) getFellow("lblNamaUnitKerja");
        lblPosPendapatan = (Label) getFellow("lblPosPendapatan");
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        txtboxKodeUnit = (Textbox) getFellow("txtboxKodeUnit");
        txtboxSearch = (Textbox) getFellow("txtboxSearch");
        txtboxIdPosAnggaranPendapatanUnit = (Textbox) getFellow("txtboxIdPosAnggaranPendapatanUnit");
        txtboxIdPosPendapatan = (Textbox) getFellow("txtboxIdPosPendapatan");
        lstboxPosPendapatan = (Listbox) getFellow("lstboxPosPendapatan");
        session = new ClassSession("2009", "");
        lblTahunAnggaran.setValue(session.getThnAnggaran());
        loadTreeUnKerjaTop();
        loadPosPendapatanByTahun();
    }

    /*public void loadTreeUnitKerja() throws Exception {
    treeUnitKerja.removeChild(treeUnitKerja.getFirstChild());
    treeUnitKerja.clear();
    Treechildren child = new Treechildren();
    Map map = new HashMap();
    map.put(0, child);
    int tmpIdInduk = 0;
    for (Map unit : posPendapatanUnitDAO.getUnitKerja()) {
    Treeitem item = new Treeitem();
    item.setId(unit.get("Kd_unit_kerja").toString());
    item.setValue(unit);
    item.setLabel(unit.get("Nama_unit_kerja").toString());
    Component comp = (Component) map.get(unit.get("idIndukUnitKerja"));
    if (tmpIdInduk == unit.get("idIndukUnitKerja")) {
    item.setParent(comp);
    map.put(unit.get("Kd_unit_kerja").toString(), item);
    } else {
    Treechildren grandChild = new Treechildren();
    grandChild.appendChild(item);
    grandChild.setParent(comp);
    map.put(unit.get("Kd_unit_kerja").toString(), item);
    map.put(unit.get("idIndukUnitKerja"), grandChild);
    tmpIdInduk = (Integer) unit.get("idIndukUnitKerja");
    }
    }
    treeUnitKerja.appendChild((Component) map.get(0));
    }*/
    public void loadTreeUnKerjaTop() throws Exception {
        treeUnitKerja.removeChild(treeUnitKerja.getFirstChild());
        treeUnitKerja.clear();
        Treechildren child = new Treechildren();
        Map map = new HashMap();
        map.put(0, child);
        int tmpIdInduk = 0;
        for (PerekamanKodeGLUnitKerja unit : unitKerjaDAO.list()) {
            Treeitem item = new Treeitem();
            item.setId(String.valueOf(unit.getIdUnitKerja()));
            item.setValue(unit);
            item.setLabel(unit.getNama_unit_kerja());
            Component comp = (Component) map.get(unit.getIdIndukUnitKerja());
            if (tmpIdInduk == unit.getIdIndukUnitKerja()) {
                item.setParent(comp);
                map.put(unit.getIdUnitKerja(), item);
            } else {
                Treechildren grandChild = new Treechildren();
                grandChild.appendChild(item);
                grandChild.setParent(comp);
                map.put(unit.getIdUnitKerja(), item);
                map.put(unit.getIdIndukUnitKerja(), grandChild);
                tmpIdInduk = unit.getIdIndukUnitKerja();
            }
        }
        treeUnitKerja.appendChild((Component) map.get(0));
    }

    public void loadPosPendapatanByTahun() throws Exception {
        lstboxPosPendapatan.getItems().clear();

        for (final Map map : posPendapatanUnitDAO.getUnitKerjaAndPendapatanByTahun(lblTahunAnggaran.getValue())) {
            boolean data = false;
            Listitem item = new Listitem();
            item.setValue(map);
            /*for (final Map m : posPendapatanUnitDAO.getUnitKerjaAndPendapatanByTahun(lblTahunAnggaran.getValue())) {
            if (m.get("Nama_unit_kerja").equals(map.get("Nama_unit_kerja")) && m.get("posPendapatanHidden").equals(map.get("posPendapatanHidden"))) {
            data = true;
            } else {
            data = false;
            }
            }*/

            item.appendChild(new Listcell(map.get("posPendapatan").toString()));
            item.appendChild(new Listcell(map.get("Nama_unit_kerja").toString()));
            Listcell listcell = new Listcell();
            if (!ClassAntiNull.AntiNullString(map.get("Nama_unit_kerja")).trim().equalsIgnoreCase("")) {
                Toolbarbutton toolbarbtnUbah = new Toolbarbutton();
                toolbarbtnUbah.setLabel("[ubah]");
                toolbarbtnUbah.addEventListener("onClick", new EventListener() {

                    public void onEvent(Event arg0) throws Exception {
                        txtboxSearch.setDisabled(false);
                        simpan = false;
                        txtboxIdPosPendapatan.setValue(map.get("idPosPendapatan").toString());
                        if (map.get("posPendapatan").toString().equals("")) {
                            lblPosPendapatan.setValue(map.get("posPendapatanHidden").toString());
                            txtboxSearch.setValue(map.get("posPendapatanHidden").toString());
                        } else {
                            lblPosPendapatan.setValue(map.get("posPendapatan").toString());
                            txtboxSearch.setValue(map.get("posPendapatan").toString());
                        }
                        txtboxIdPosAnggaranPendapatanUnit.setValue(map.get("idPosAnggaranPendapatanUnit").toString());
                        txtboxKodeUnit.setValue(map.get("kodeUnitKerja").toString());
                        lblNamaUnitKerja.setValue(map.get("Nama_unit_kerja").toString());

                    }
                });
                Toolbarbutton toolbarbtnHapus = new Toolbarbutton();
                toolbarbtnHapus.setLabel("[hapus]");
                toolbarbtnHapus.addEventListener("onClick", new EventListener() {

                    public void onEvent(Event arg0) throws Exception {
                        txtboxSearch.setDisabled(false);
                        if (Messagebox.show("Apakah pos pendapatan " + map.get("Nama_unit_kerja") +
                                " akan dihapus?", "Pesan Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                            try {
                                posPendapatanUnitDAO.delete(lblTahunAnggaran.getValue(), Integer.valueOf(map.get("idPosAnggaranPendapatanUnit").toString()));
                                loadPosPendapatanByTahun();
                                Messagebox.show("Data sudah dihapus", "Infornasi", Messagebox.OK, Messagebox.INFORMATION);
                            } catch (Exception e) {
                                Messagebox.show("Gagal menghapus data " + e.getMessage(), "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
                            }
                        }
                    }
                });
                listcell.appendChild(toolbarbtnUbah);
                listcell.appendChild(new Space());
                listcell.appendChild(toolbarbtnHapus);
                item.appendChild(listcell);
                lstboxPosPendapatan.appendChild(item);
            }

        }
    }

    public void lstboxPosPendapatanOnSelect() {
        Map map = (Map) lstboxPosPendapatan.getSelectedItem().getValue();
        lblNamaUnitKerja.setValue(map.get("Nama_unit_kerja").toString());
        if (map.get("posPendapatan").toString().equals("")) {
            txtboxSearch.setValue(map.get("posPendapatanHidden").toString());
            lblPosPendapatan.setValue(map.get("posPendapatanHidden").toString());
        } else {
            txtboxSearch.setValue(map.get("posPendapatan").toString());
            lblPosPendapatan.setValue(map.get("posPendapatan").toString());
        }
        txtboxSearch.setDisabled(true);
    }

    public void treeUnitKerjaOnSelect() throws Exception {
        PerekamanKodeGLUnitKerja unit = (PerekamanKodeGLUnitKerja) treeUnitKerja.getSelectedItem().getValue();
        lblNamaUnitKerja.setValue(unit.getNama_unit_kerja());
        txtboxKodeUnit.setValue(unit.getKd_unit_kerja());

    }

    public void btnCariOnClick() throws InterruptedException {
        if (txtboxKodeUnit.getValue().equals("")) {
            Messagebox.show("Pilih Nama Unit Kerja", "Informasi", Messagebox.OK, Messagebox.ERROR);
        } else {
            final Window win = (Window) Executions.createComponents("sippzul/perekamanpospendapatanunit/PendapatanUnitPopup.zul", this, null);
            Textbox txtboxKeySearch = (Textbox) win.getFellow("txtboxKeySearch");
            txtboxKeySearch.setValue(txtboxSearch.getValue());
            win.doModal();
        }

    }

    public void btnSimpanOnClick() throws InterruptedException, Exception {
        boolean nextRow = true;
        if (simpan) {
            if (txtboxKodeUnit.getValue().equals("") || txtboxKodeUnit.getValue().isEmpty() || txtboxIdPosPendapatan.getValue().equals("") || txtboxIdPosPendapatan.getValue().isEmpty()) {
                Messagebox.show("Data Tidak Lengkap", "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
            } else {
                //Cek apakah data sudah ada didalam kolum posPendapatan dan unit kerja
                for (Map map : posPendapatanUnitDAO.getPosPendapatanAndNamaUnitKerjaByIdAndTahun(txtboxKodeUnit.getValue().toString(),
                        Integer.valueOf(txtboxIdPosPendapatan.getValue().toString()), lblTahunAnggaran.getValue().toString())) {
                    if (map.get("idPosPendapatan").toString().equals(txtboxIdPosPendapatan.getValue()) &&
                            map.get("kodeUnitKerja").toString().equals(txtboxKodeUnit.getValue())) {
                        nextRow = false;
                        break;
                    } else {
                        nextRow = true;
                    }
                }
                if (nextRow == false) {
                    Messagebox.show("Data sudah ada", "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
                } else {
                    PerekamanPosPendapatanUnit posPendapatanUnit = new PerekamanPosPendapatanUnit();
                    posPendapatanUnit.setIdPosPendapatan(Integer.valueOf(txtboxIdPosPendapatan.getValue()));
                    posPendapatanUnit.setKodeUnitKerja(txtboxKodeUnit.getValue());
                    posPendapatanUnit.setTahunAnggaran(lblTahunAnggaran.getValue());
                    try {
                        posPendapatanUnitDAO.insert(posPendapatanUnit);
                        clear();
                        loadPosPendapatanByTahun();
                        Messagebox.show("Data sudah disimpan", "Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    } catch (Exception exception) {
                        Messagebox.show("Gagal menyimpan data " + exception.getMessage(), "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
                    }

                }
            }
        } else {
             for (Map map : posPendapatanUnitDAO.getPosPendapatanAndNamaUnitKerjaByIdAndTahun(txtboxKodeUnit.getValue().toString(),
                        Integer.valueOf(txtboxIdPosPendapatan.getValue().toString()), lblTahunAnggaran.getValue().toString())) {
                    if (map.get("idPosPendapatan").toString().equals(txtboxIdPosPendapatan.getValue()) &&
                            map.get("kodeUnitKerja").toString().equals(txtboxKodeUnit.getValue())) {
                        nextRow = false;
                        break;
                    } else {
                        nextRow = true;
                    }
             }
             if (nextRow == false) {
                   Messagebox.show("Data sudah ada", "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
             } else {
                PerekamanPosPendapatanUnit posPendapatanUnit = new PerekamanPosPendapatanUnit();
                posPendapatanUnit.setIdPosAnggaranPendapatanUnit(Integer.valueOf(txtboxIdPosAnggaranPendapatanUnit.getValue()));
                posPendapatanUnit.setIdPosPendapatan(Integer.valueOf(txtboxIdPosPendapatan.getValue()));
                posPendapatanUnit.setKodeUnitKerja(txtboxKodeUnit.getValue());
                posPendapatanUnit.setTahunAnggaran(lblTahunAnggaran.getValue());
                try {
                    posPendapatanUnitDAO.update(posPendapatanUnit);
                    clear();
                    loadPosPendapatanByTahun();
                    Messagebox.show("Data sudah diubah", "Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    simpan = true;
                } catch (Exception e) {
                    Messagebox.show("Gagal mengubah data " + e.getMessage(), "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
                }
             }
        }
    }

    public void btnBatalOnClick() throws InterruptedException {
        clear();
    }

    public void btnSalinOnClick() throws InterruptedException {
        final Window win = (Window) Executions.createComponents("sippzul/perekamanpospendapatanunit/PerekamanPosPopup.zul", this, null);
        win.doModal();
    }

    public void clear() {
        txtboxIdPosPendapatan.setValue("");
        txtboxKodeUnit.setValue("");
        txtboxSearch.setValue("");
        txtboxSearch.setDisabled(false);
        lblNamaUnitKerja.setValue("......................");
        lblPosPendapatan.setValue("......................");
        simpan = true;
    }

    public void loadData() throws Exception {
        loadPosPendapatanByTahun();
    }
}
